home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / GotoDialog.C < prev    next >
C/C++ Source or Header  |  1990-12-04  |  2KB  |  93 lines

  1. //$GotoDialog$
  2.  
  3. #include "GotoDialog.h"
  4. #include "Dialog.h"
  5. #include "BlankWin.h"
  6.  
  7. #include "NumItem.h"
  8. #include "TextView.h"
  9. #include "BorderItems.h"
  10. #include "Buttons.h"
  11. #include "EnumItem.h"
  12.  
  13. #include "Document.h"
  14.  
  15. #include "WindowSystem.h"
  16. #include "ObjectTable.h"
  17.  
  18. static GotoDialog *gotoDialog;
  19.  
  20. //---- entry Point -------------------------------------------------------------
  21.  
  22. void GotoLine(TextView *tv)
  23. {
  24.     if (gotoDialog == 0) {
  25.     gotoDialog= new GotoDialog;
  26.     ObjectTable::AddRoot(gotoDialog);
  27.     }
  28.     if (gotoDialog->ShowGotoDialog(tv) != cIdYes)
  29.     return;
  30.     int at= gotoDialog->GetLineNo();
  31.     LineMark *lm= tv->MarkAtLine(at-1);
  32.     tv->SetSelection(lm->Pos(),lm->End(),TRUE);
  33.     tv->RevealSelection();
  34.     GraphicDelay(500);
  35.     tv->SetSelection(lm->Pos(),lm->Pos(),TRUE);    
  36. }
  37.  
  38. //---- GotoDialog --------------------------------------------------------------
  39.  
  40. MetaImpl(GotoDialog, (TP(view), TP(line), 0));
  41.  
  42. GotoDialog::GotoDialog() : Dialog(0, eBWinBlock)
  43. {
  44.     line= 0;
  45. }
  46.  
  47. int GotoDialog::ShowGotoDialog(TextView *v)
  48. {
  49.     lineNo= -1;
  50.     if (v) {
  51.     view= v;
  52.     return ShowOnWindow(v->GetWindow());
  53.     }
  54.     return -1;
  55. }
  56.  
  57. VObject *GotoDialog::DoCreateDialog()
  58. {
  59.     return new BorderItem(
  60.     new BorderItem(
  61.         new Cluster(cIdNone, eVObjHCenter, 10,
  62.         new BorderItem ("Go to line",
  63.             new EnumItem(cIdNone, eVObjVBase, line= new NumItem(cIdNone, 1))
  64.         ),
  65.         new Cluster(cIdNone, eVObjVBase, 20,
  66.             new ActionButton(cIdYes, "Ok", TRUE),
  67.             new ActionButton(cIdCancel, "Cancel"),
  68.             0
  69.         ),
  70.         0
  71.         ),
  72.         20, 3
  73.     ),
  74.     Point(2,2),
  75.     1
  76.     );
  77. }
  78.  
  79. void GotoDialog::DoSetup()
  80. {
  81.     int f,t;
  82.     view->GetSelection(&f, &t);
  83.     line->SetValue(view->CharToLine(f)+1);
  84.     line->SetRange(1, max(1, view->NumberOfLines()));
  85. }
  86.  
  87. void GotoDialog::Control(int id, int p, void *v)
  88. {
  89.     Dialog::Control(id, p, v);
  90.     if (id == cIdYes)
  91.     lineNo= line->GetValue();
  92. }
  93.